package cron

import (
	"context"
	"time"
)

type DoCronFunc func(ctx *Context) error

type JobCron struct {
	tConfig       TimeConfig
	Task          []DoCronFunc
	ctx           *Context      //Task的入参
	BeginStopChan chan struct{} //停止启动通道
	QuitChan      chan struct{} //控制通道，有货直接退出
	doCron        chan struct{}
}

type TimeConfig struct {
	//开始时间
	BeginAt time.Time
	//间隔多久执行一次
	Interval []time.Duration
	//定时执行
	Cron *FixTime
}

type Context struct {
	Ctx   context.Context
	Inter interface{}
}

// FixTime 从年向秒，当出现第一个为空时（月和周除外），就代表每下一个时间开始，
// 为空之前的必须为空，之后的必须不为空
// 如MouthDay和Hour为空(WeekDay也必然为空)，就代表没Hour的几Minute几Second要func()
// 由于要配置时间年份月份对不对那些太烦了，就以一月
// 用于入参
type FixTime struct {
	Mouth   []uint
	WeekDay []uint //逻辑独立
	Day     []uint //Mouth的Day
	Hour    []uint
	Minute  []uint
	Second  []uint
}

//TODO:时间判断以Nanoseconds为准， 一直循环遍历，当time.Now()超过就向管道传
